package com.shenshen.Unit;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.text.DecimalFormat;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class NumberUtil {

	private static String strVal;

	/**
	 * 功能：判断是否全部为数字 示例：
	 */
	public static boolean isNUmber(String src) {

		// TODO 实现代码
		if (src == null || src.trim().length() == 0)
			return false;

		String reg = "^(-)?[0-9]+(\\.[0-9]+)?$";
		Pattern pattern = Pattern.compile(reg);
		Matcher matcher = pattern.matcher(src);
		return matcher.matches();

	}

	/**
	 * 功能：提供精确的加法运算。
	 * 
	 */
	public static double add(double v1, double v2) {
		// TODO 实现代码
		BigDecimal decimal = new BigDecimal(Double.toString(v1));
		// 得到一个结果
		BigDecimal add = decimal.add(new BigDecimal(Double.toString(v2)));
		return add.doubleValue();
	}

	// 相减
	public static double subtract(double v1, double v2) {
		// TODO 实现代码
		BigDecimal decimal = new BigDecimal(Double.toString(v1));
		// 得到一个结果
		BigDecimal add = decimal.subtract(new BigDecimal(Double.toString(v2)));
		return add.doubleValue();
	}

	// 相乘法
	public static double multi(double v1, double v2) {
		// TODO 实现代码
		BigDecimal decimal = new BigDecimal(Double.toString(v1));
		// 得到一个结果
		BigDecimal add = decimal.multiply(new BigDecimal(Double.toString(v2)));
		return add.doubleValue();
	}

	// 相除法
	public static double divide(double v1, double v2, int scale) {

		if (v2 < 0.0001) {
			throw new ArithmeticException("除数太小了！"); // NaN
		}

		// TODO 实现代码
		BigDecimal decimal = new BigDecimal(Double.toString(v1));
		// 得到一个结果
		BigDecimal add = decimal.divide(new BigDecimal(Double.toString(v2)), scale, RoundingMode.HALF_DOWN);
		return add.doubleValue();
	}

	/**
	 * 功能：提供精确的小数位四舍五入处理。
	 * 
	 */
	public static double round(double v, int scale) {
		// TODO 实现代码
		// double b=20.1265;
		BigDecimal decimal = new BigDecimal(v);
		double d = decimal.setScale(scale, BigDecimal.ROUND_HALF_UP).doubleValue();
		return d;
	}

	/**
	 * 功能：提供精确的小数位四舍五入处理。
	 * 
	 */
	public static String capitalAmountRMB(double value) {
		// TODO 实现代码
		String[] nujit = { "圆", "拾", "佰 ", "仟", "万", "拾", "佰", "仟", "亿", "十", "百" };
		String[] funit = { "角", "分 ", "厘", " 毫" };
		String[] numberHanzi = { "零", " 壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" };

		// 只处理4位即可
		double val = round(value, 4);

		DecimalFormat df = new DecimalFormat("0.0000");
		String strVal = df.format(val);

		// 先处理整数部分
		int dotIndex = strVal.indexOf('.');
		String firstPart = strVal.substring(0, dotIndex);
		String reverse = StringUtil.reverse(firstPart);
		char[] array = reverse.toCharArray();
		String str = new String();
		// 进行字符串拼接
		for (int i = 0; i < array.length; i++) {
			if (array[i] == '0') {
				str = numberHanzi[array[i] - '0'] + str;
			} else {
				str = numberHanzi[array[i] - '0'] + nujit[i] + str;

			}
		}

		// 得到小数部分
		String secondPart = strVal.substring(dotIndex + 1, strVal.length());
		char[] array2 = secondPart.toCharArray();
		// 进行字符串拼接
		for (int i = 0; i < array2.length; i++) {
			str = str + numberHanzi[array2[i] - '0'] + funit[i];
		}

		return "￥" + str;

	}

}
